In the abstract, containers in any form represent a standardized method of packaging and interacting with information. Containers can be isolated from each other and used in parallel without any risk of cross-contamination. In the modern software world, the term “container” has gained a specific meaning. A software container, such as a Docker® container, is a software construct the logically encapsulates and defines a piece of software. The most common type of software to be encapsulated in the container is an application, service, or microservice. Modern containers also include all of the software support required for the application/service to operate, such as an operating system, libraries, storage volumes, configuration files, application binaries, and other parts of a technology stack that would be found in a typical computing environment. This container environment can then be used to create multiple containers that each run their own services in any environment. Containers can be deployed in a production data center, an on-premises data center, a cloud computing platform, and so forth without any changes. Spinning up a container on the cloud is the same as spinning up a container on a local workstation.
Modern service-oriented architectures and cloud computing platforms break up large tasks into many small, specific tasks. Containers can be instantiated to focus on individual specific tasks, and multiple containers can then work in concert to implement sophisticated applications. This may be referred to as a microservice architecture, and each container can use different versions of programming languages and libraries that can be upgraded independently. The isolated nature of the processing within containers allows them to be upgraded and replaced with little effort or risk compared to changes that will be made to a larger, more monolithic architectures. Container platforms are much more efficient than traditional virtual machines in running this microservice architecture, although virtual machines can be used to run a container platform.